﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Configuration;
using ProjetoDLL.Model;
using System.Configuration;

namespace ProjetoDLL.DAO
{
    public class ProdutoDAO : BaseDAO<Produto>
    {
        public override void Inserir(Produto obj)
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            string query = string.Format("INSERT INTO tb_produto (nome, descr_breve, descr, especif_tecnica, valor, porcent_desconto, quantt_estoque, status, foto1, foto2, foto3, foto4)"
                + "VALUES ('{0}','{1}','{2}','{3}',{4},{5},{6},'{7}','{8}','{9}','{10}','{11}')",
                obj.Nome, obj.DescricaoCurta, obj.DescricaoLonga, obj.EspecifTecnica, obj.Valor, obj.PorcentDesconto, obj.QuantidadeEstoque, obj.Status, obj.Foto1, obj.Foto2, obj.Foto3, obj.Foto4);

            exec_comando(query, conexao);
        }

        public override void Atualizar(Produto obj)
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            string query = string.Format("UPDATE tb_produto SET nome='{0}', descr_breve='{1}', descr='{2}', especif_tecnica='{3}', valor={4}, porcent_desconto={5}, quantt_estoque={6}, status='{7}',"+
                "foto1='{8}', foto2='{9}', foto3='{10}', foto4='{11}' WHERE pk_produto={12}",
                                   obj.Nome, obj.DescricaoCurta, obj.DescricaoLonga, obj.EspecifTecnica, obj.Valor, obj.PorcentDesconto, obj.QuantidadeEstoque, obj.Status,
                                   obj.Foto1, obj.Foto2, obj.Foto3, obj.Foto4, obj.IdProduto);

            exec_comando(query, conexao);
        }

        public override void Excluir(Produto obj)
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            string query = string.Format("DELETE FROM tb_produto WHERE pk_produto = {0}", obj.IdProduto);

            exec_comando(query, conexao);
        }

        public override Produto RecuperarUm(int chave)
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            string query;
            SqlDataReader dr;

            Produto produto = new Produto();

            query = string.Format("SELECT * FROM tb_produto WHERE pk_produto = {0}", chave);

            SqlCommand cmd = new SqlCommand(query, conexao);

            conexao.Open();
            dr = cmd.ExecuteReader();

            if (dr.Read())
            {
                produto.IdProduto = Convert.ToInt32(dr["pk_produto"]);
                produto.Nome = Convert.ToString(dr["nome"]);
                produto.DescricaoCurta = Convert.ToString(dr["descr_breve"]);
                produto.DescricaoLonga = Convert.ToString(dr["descr"]);
                produto.EspecifTecnica = Convert.ToString(dr["especif_tecnica"]);
                produto.Valor = Convert.ToDouble(dr["valor"]); ;
                produto.PorcentDesconto = Convert.ToDouble(dr["porcent_desconto"]);
                produto.QuantidadeEstoque = Convert.ToInt32(dr["quantt_estoque"]);
                produto.Status = Convert.ToString(dr["status"]);
                produto.Foto1 = Convert.ToString(dr["foto1"]);
                produto.Foto2 = Convert.ToString(dr["foto2"]);
                produto.Foto3 = Convert.ToString(dr["foto3"]);
                produto.Foto4 = Convert.ToString(dr["foto4"]);
            }

            dr.Close();
            conexao.Close();

            return produto;
        }

        public override List<Produto> RecuperarTodos()
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            List<Produto> listaEntidades = new List<Produto>();
            SqlDataReader dr;
            SqlCommand cmd = new SqlCommand("SELECT * FROM tb_produto", conexao);
            conexao.Open();
            dr = cmd.ExecuteReader();

            Produto produto;

            while (dr.Read())
            {
                produto = new Produto();
                produto.IdProduto = Convert.ToInt32(dr["pk_produto"]);
                produto.Nome = Convert.ToString(dr["nome"]);
                produto.DescricaoCurta = Convert.ToString(dr["descr_breve"]);
                produto.DescricaoLonga = Convert.ToString(dr["descr"]);
                produto.EspecifTecnica = Convert.ToString(dr["especif_tecnica"]);
                produto.Valor = Convert.ToSingle(dr["valor"]); ;
                produto.PorcentDesconto = Convert.ToSingle(dr["porcent_desconto"]);
                produto.QuantidadeEstoque = Convert.ToInt32(dr["quantt_estoque"]);
                produto.Status = Convert.ToString(dr["status"]);
                produto.Foto1 = Convert.ToString(dr["foto1"]);
                produto.Foto2 = Convert.ToString(dr["foto2"]);
                produto.Foto3 = Convert.ToString(dr["foto3"]);
                produto.Foto4 = Convert.ToString(dr["foto4"]);

                listaEntidades.Add(produto);
            }

            dr.Close();
            conexao.Close();

            return listaEntidades;
        }
    }
}
